home *** CD-ROM | disk | FTP | other *** search
- {
- NICHOLAS KIRSCH
-
- Here is some source For using CD-ROM's With Pascal, if you get TP7,
- it's still compatible.
-
- { Copyright 1993 by Michael W. Armstrong.
- 2800 Skipwith Rd
- Richmond, VA 23294
-
- Compuserve ID 72740, 1145
- This Program is entered as Shareware. if you find it useful, a small
- donation would be appreciated. Feel free to incorporate the code into
- your own Programs.
- }
-
- {$X+}
- Program CDPlay;
-
- {$IfDef Windows}
- {$C PRELOAD}
- Uses
- CD_Vars,
- CDUnit_P,
- WinCrt,
- WinProcs;
- {$else}
- Uses
- CD_Vars,
- CDUnit_P,
- Crt,
- Drivers;
- {$endIf}
-
- Type
- TotPlayRec = Record
- Frames,
- Seconds,
- Minutes,
- Nada : Byte;
- end;
-
- Var
- GoodDisk : Boolean;
- SaveExit : Pointer;
- OldMode : Word;
- CurrentTrack,
- StartTrack,
- endTrack : Integer;
- TotPlay : TotPlayRec;
- TrackInfo : Array [1..99] of PAudioTrackInfo;
-
- Function LeadingZero(w : Word) : String;
- Var
- s : String;
- begin
- Str(w : 0, s);
- LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
- end;
-
- Procedure DrawScreen;
- Const
- TStr = '%03d:%02d';
- VStr = '%1d.%2d';
- Var
- FStr : PChar;
- NStr : String;
- Param : Array [1..2] of LongInt;
- Code : Integer;
- begin
- WriteLn('CD ROM Audio Disk Player');
- WriteLn('Copyright 1992 by M. W. ARMSTRONG');
- Param[1] := MSCDEX_Version.Major;
- Param[2] := MSCDEX_Version.Minor;
-
- {$IfDef Windows}
- wvsPrintf(FStr, VStr, Param);
- {$else}
- FormatStr(NStr, VStr, Param);
- {$endIf}
-
- WriteLn('MSCDEX Version ', NStr);
- Str(NumberOfCD, NStr);
- WriteLn('Number of CD ROM Drives is: ' + Nstr);
- WriteLn('First CD Drive Letter is : ' + Chr(FirstCD + 65));
- WriteLn('There are ' + LeadingZero(endTrack - StartTrack + 1) +
- ' Tracks on this disk');
- Code := 1;
- end;
- {***********************************************************************}
-
- {***********************************************************************}
-
-
- Procedure Setup;
- Var
- LeadOut,
- StartP,
- TotalPlayTime : LongInt;
- I : Integer;
- A, B, C : LongInt;
- Track : Byte;
- EA : Array [1..4] of Byte;
- SP, EP : LongInt;
-
- begin
- FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
- DeviceStatus;
- if Audio then
- begin
- Audio_Disk_Info;
- TotalPlayTime := 0;
- LeadOut := AudioDiskInfo.LeadOutTrack;
-
- StartTrack := AudioDiskInfo.LowestTrack;
- endTrack := AudioDiskInfo.HighestTrack;
- CurrentTrack := StartTrack;
- I := StartTrack - 1;
-
- Repeat { Checks if Audio Track or Data Track }
- Inc(I);
- Track := I;
- Audio_Track_Info(StartP, Track);
- Until (Track and 64 = 0) or (I = endTrack);
-
- StartTrack := I;
-
- For I := StartTrack to endTrack DO
- begin
- Track := I;
- Audio_Track_Info(StartP, Track);
- New(TrackInfo[I]);
- FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
- TrackInfo[I]^.Track := I;
- TrackInfo[I]^.StartPoint := StartP;
- TrackInfo[I]^.TrackControl := Track;
- end;
-
- For I := StartTrack to endTrack - 1 DO
- TrackInfo[I]^.endPoint := TrackInfo[I+1]^.StartPoint;
- TrackInfo[endTrack]^.endPoint := LeadOut;
-
- For I := StartTrack to endTrack DO
- Move(TrackInfo[I]^.endPoint, TrackInfo[I]^.Frames, 4);
-
- TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
- TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
-
- For I := StartTrack + 1 to endTrack DO
- begin
- EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
- SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
- EP := EP - SP;
- TrackInfo[I]^.PlayMin := EP div 60;
- TrackInfo[I]^.PlaySec := EP Mod 60;
- end;
-
- TotalPlayTime := AudioDiskInfo.LeadOutTrack -
- TrackInfo[StartTrack]^.StartPoint;
- Move(TotalPlayTime, TotPlay, 4);
- end;
- end;
-
- {***********************************************************************}
-
-
- begin
- Setup;
- if Audio then
- if Playing then
- StopAudio
- else
- begin
- StopAudio;
- Play_Audio(TrackInfo[StartTrack]^.StartPoint,
- TrackInfo[endTrack]^.endPoint);
- Audio_Status_Info;
- DrawScreen;
- end
- else
- WriteLn('This is not an Audio CD');
- WriteLn('UPC Code is: ', UPC_Code);
- end.